【日志】logging
简介
日志的存在是为了监控代码执行的效率和结果,当代码出现问题,则可以很方便的捕捉异常并输出
故日志在做标记的时候需要考虑的就是,在什么样的条件下返回什么样的检查结果,并且输出的格式是什么样的便于标准化处理~~
python的logging包实质上就提供了一个标准化输出的日志结构
其创建需要包括以下几个接口
- Logger记录器:创建一个实例,创建一个接口来生成日志
- Formatter格式化器:将生成的日志处理偶成指定的格式
- Filter过滤器:指定特定的日志进行过滤存储
- Handler处理器:将生成日志按照指定的存储格式输出到相应的位置
一般情况下,log的日志级别有以下几类:
- notset -- 0 最基础的信息输出
- debug -- 10 详细信息,显示全部执行情况
- info -- 20 简化信息,显示节点执行情况
- warning -- 30 出现问题,但是代码可以继续执行
- warn -- 30 出现问题,但是代码可以继续执行
- error -- 40 出现错误,代码一些功能不能实现
- critical -- 50 严重错误,代码完全不能继续运行
工作流程
- 导入logging模块,创建logger记录器
- 创建handler处理器,确定输出的日志存储类型和输出位置
- 确定日志的输出最高级别
- 确定输出日志的文本形式
- 将处理器配置成相应的文本形式
- 将处理器添加到logger记录器中
功能
输出格式 -- 用于Handler处理器
| 函数 | 说明 |
|---|---|
| StreamHandler() | 日志以流格式存储 |
| FileHandler() | 日志以文件格式存储 |
| NullHandler() | 日志不输出 |
format格式 -- 用于Formatter
| 格式 | 说明 |
|---|---|
| %(levelno)s | 日志级别数值 |
| %(levelname)s | 日志级别名称 |
| %(pathname)s | 执行代码的路径 |
| %(filename)s | 执行程序的名称 |
| %(funcName)s | 当前函数的名称 |
| %(lineno)d | 当前输出日志行号 |
| %(asctime)s | 打印日志时间 |
| %(thread)s | 执行的线程id |
| %(threadName)s | 执行的线程名称 |
| %(process)d | 执行的进程id |
| %(message)s | 打印的日志信息 |
说明
import logging
logger = logging.getLogger('test') # 创建logger记录器
logger.setLevel(logging.DEBUG) # 设置日志级别
fh = logging.FileHandler('./log.log') # 设置输出格式和路径
fh.setLevel(logging.WARN) # 设置输出日志级别
log_format = '[%(levelname)s] %(asctime)s %(filename)s thread:%(threadName)s process:%(process) %(message)s' # 配置输出日志格式
date_format = '%a %d %b %Y %H:%M:%S' # 设置日志格式
formatt = logging.Formatter(log_format, date_format) # 确定输出日志格式
fh.setFormatter(formatt) # 按照给定格式输出handler处理器
logger.addHandler(fh) # 记录器增加处理器
logging.basicConfig(level=logging.INFO, format=log_format) # 直接打印到控制台
# 设置不同级别的日志的输出信息message
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')